package com.oa.role.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import com.oa.role.dto.RoleDto;
import com.oa.system.entity.Group;
import com.oa.system.entity.Role;
import com.oa.user.dto.UserInfoDto;

public interface RoleManagerService {
	/*
	 * 返回全部权限列表
	 * @return Iterable<Group> 全部权限列表
	 */
	Iterable<Group> findAllGroup();
	
	/*
	 * 返回全部角色列表
	 * @return Iterable<Role> 全部角色列表
	 */
	Iterable<Role> findAllRole();

	/*
	 * 返回分页的角色信息
	 * @param pageable 分页参数
	 * @return Page<Role> 分页的角色信息
	 */
	Page<Role> findAllRole(Pageable pageable);

	/*
	 * 已分页的用户角色信息
	 * @param pageable 分页参数
	 * @return Page<RoleDto> 分页的用户角色信息
	 */
	Page<RoleDto> findAllUser(Pageable pageable);

	/*
	 * 通过查询参数查找角色信息
	 * @param spec 高级查询参数
	 * @param pageable 分页参数
	 * @return Page<Role> 分页的角色信息
	 */
	Page<Role> searchAllRole(Specification<Role> spec, Pageable pageable);

	/*
	 * 通过查询参数查找用户角色信息
	 * @param userInfoDto 查询用户的参数
	 * @param pageable 分页参数
	 * @return Page<RoleDto> 查询的用户角色信息
	 */
	Page<RoleDto> searchAllUser(UserInfoDto userInfoDto, Pageable pageable);

	/*
	 * 保存或更新角色信息
	 * @param role 带保存或更新的角色信息
	 * @param groups 角色的权限列表
	 * @return Role 已保存的角色信息
	 */
	Role saveOrUpdateRole(Role role, List<Long> groups);

	/*
	 * 更新用户的角色信息
	 * @param id 用户ID
	 * @param roleId 角色ID
	 */
	void updateUserRole(Long id, Long roleId);

	/*
	 * 删除单个角色
	 * @param id 角色ID
	 */
	void deleteRole(Long id);

	/*
	 * 删除多个角色
	 * @param ids 角色ID列表
	 */
	void deleteRole(List<Long> ids);
}
